<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=1, initial-scale=1.0" />
  <title>Document</title>
</head>

<body>
  <script>
    // 需求：
    // 1. 把下面的数据结构
    let array = [
      {
        id: 1,
        pid: 0,
        child: [{ id: 2, pid: 1, child: [{ id: 3, pid: 2 }] }],
      },
      {
        id: 4,
        pid: 0,
        child: [{ id: 5, pid: 4, child: [{ id: 6, pid: 5 }] }],
      },
    ]
    // 变成下面的样子 → 把array数组的对应数据取出来保存在newArray数组中，newArray的结果如下：
    /*
     [
       { id: 3, pid: 2 },
       { id: 2, pid: 1 },
       { id: 1, pid: 0 },
       { id: 6, pid: 5 },
       { id: 5, pid: 4 },
       { id: 4, pid: 0 },
     ]
    */
    //     prev 必需。累计器累计回调的返回值; 表示上一次调用回调时的返回值，或者初始值 init;
    // cur 必需。表示当前正在处理的数组元素；
    // index 可选。表示当前正在处理的数组元素的索引，若提供 init 值，则起始索引为- 0，否则起始索引为1；
    // arr 可选。表示原数组；
    // init 
    // 提示 使用forEach和for in  
    const newArray = array.reduce(function flat(prev, cur) {
      const { id, pid, child } = cur
      child && child.forEach(item => flat(prev, item))
      prev.push({ id, pid })
      return prev
    }, [])
    console.log(newArray)
    //虽然你讲了，但还是不明白，看的别人的
  </script>
</body>

</html>